<?php
require_once "../config/DefinitionsSQL.php";
require_once "../config/DefinitionsDAO.php";
require_once "../config/DefinitionsDTO.php";
require_once "../config/DefinitionsPath.php";
require_once "../config/DefinitionsEnum.php";

class PublicarFormularioController {

	public $dao;

	/**
	 * Metodo Construtor
	 */
	public function PublicarFormularioController() {
		$this->dao = new DAOFactory();
	}

	/**
	 * Metodo para publicar um formulario
	 * @since 1.0 - 03/12/2009
	 */
	public function publicarFormulario($codFormulario) {
		try {
			if ($codFormulario == null ) {
				throw new Exception("Par&acirc;metro nulo em PublicarFormularioController->publicarFormulario");
			}

			$controller = new PublicarFormularioController();

			// monta arquivo e coloca em pasta do servidor
			$retorno = $controller->montarArquivo($codFormulario);

			if ($retorno == "okArquivo") {
				// altera o status para publicado
				$controller->alterarStatusFormulario($codFormulario);
			}

		} catch (Exception $e) {
			echo 'Exce&ccedil;&atilde;o do sistema: ' .$e->getMessage();
		}
	}

	 /**
	  * Metodo para montar um formulario dinamico
	  * @since 1.0 - 03/12/2009
	  */
	public function montarArquivo($codFormulario) {
		try {
			if ($codFormulario == null) {
				throw new Exception("Par&acirc;metro nulo em PublicarFormularioController->montarPublicarArquivo");
			}

		    // Cria um nome para cada novo formulario
		    $objFormulario = $this->dao->getFormularioDAO()->obterNomeCursoFormulario($codFormulario);
		    $nomeNovoArquivo = "frm_" . $codFormulario . "_" . $objFormulario[0]->codCurso;

		    // Verifica se o arquivo ja existe
		    if(!file_exists($nomeNovoArquivo . ".php")) {

		        // Criamos o arquivo do usuario com w+
		        $cria = fopen(DIR_INSCRICAO . $nomeNovoArquivo . ".php", "w+");

		        // Pega o html do modelo de formulario
		        $conteudo = file_get_contents(DIR_FORM_MODELO);

		        // concatena com nome do curso, tipo de edital e html formulario dinamico para a publicacao
				$objetoFormulario = $this->dao->getFormularioDAO()->obterHtmlFormulario($codFormulario);
				$nomeCurso = $objFormulario[0]->nomeCurso;
				$objetoEdital = $this->dao->getFormularioDAO()->obterTipoEditalFormulario($codFormulario);
				$enumTipoEdital = new TipoEditalEnum();
				$edital = $enumTipoEdital->getDescricaoTipoEdital($objetoEdital[0]->tipoEdital);

				$dados = sprintf($conteudo, $nomeCurso, $edital, "<input type='hidden' name='nmArquivo' value='$nomeNovoArquivo' />", $objetoFormulario[0]->htmlFormulario);

		        // Agora escrevemos estes dados no arquivo
		        $escreve = fwrite($cria, $dados);

		        // Fechando o arquivo...
		        fclose($cria);

		        // Sucesso!
		        return "okArquivo";
		    } else {
		        // Se ja tiver um formulario com o mesmo nome
		    	throw new Exception("Exce&ccedil;&atilde;o do sistema: -> O formulario $nomeNovoArquivo j� foi publicado.");
		    }
		} catch (Exception $e) {
			echo 'Exce&ccedil;&atilde;o do sistema: ' .$e->getMessage();
		}
	}

	/**
	 * Metodo para alterar o status do formulario para publicado.
	 * @param int codFormulario
	 */
	public function alterarStatusFormulario($codFormulario) {
		try {
			if ($codFormulario == null) {
				throw new Exception("Par&acirc;metro nulo em PublicarFormularioController->alterarStatusFormulario");
			}

			$obj = $this->dao->getFormularioDAO()->obterStatusFormulario($codFormulario);
			$statusFormulario = $obj[0]->statusFormulario;

			// se status formulario = salvo e nao for nulo
			if ($statusFormulario == 0 && $statusFormulario !== null) {
				$this->dao->getFormularioDAO()->mudarStatusFormulario($codFormulario, 1);
			}
			// senao, se status = publicado
			else {
				throw new Exception("Exce&ccedil;&atilde;o do sistema->alterarStatusFormulario : formulario ja foi publicado, pois status = 1!");
			}

		} catch (Exception $e) {
			echo 'Exce&ccedil;&atilde;o do sistema: ' .$e->getMessage();
		}
	}

}
?>

